package com.lollipop.synthential.file;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;

/**
 * @Author: J.K
 * @Date: 2021-09-03 15:27
 * @Description:
 */
public class DeleteFileUtil {
    static Logger logger = LoggerFactory.getLogger(DeleteFileUtil.class);

    /**
     * 判断指定的文件或文件夹删除是否成功
     *
     * @param fileName 文件或文件夹的路径
     * @return true or false 成功返回true，失败返回false
     */
    public static boolean deleteAnyone(String fileName) {

        // 根据指定的文件名创建File对象
        File file = new File(fileName);

        // 要删除的文件不存在
        if (!file.exists()) {
//            System.out.println("文件" + fileName + "不存在，删除失败！");
            logger.error("文件[{}]不存在，删除失败！", fileName);
            return false;
        } else {
            // 要删除的文件存在,目标文件是文件
            if (file.isFile()) {
                return deleteFile(fileName);
            } else {
                // 如果目标文件是目录
                return deleteDir(fileName);
            }
        }
    }


    /**
     * 判断指定的文件删除是否成功
     *
     * @param fileName 文件路径
     * @return true or false 成功返回true，失败返回false
     */
    public static boolean deleteFile(String fileName) {

        // 根据指定的文件名创建File对象
        File file = new File(fileName);
        // 要删除的文件存在且是文件
        if (file.exists() && file.isFile()) {

            if (file.delete()) {
//                System.out.println("文件" + fileName + "删除成功！");
                logger.info("文件[{}]，删除成功！", fileName);

                return true;
            } else {
//                System.out.println("文件" + fileName + "删除失败！");
                logger.error("文件[{}]，删除失败！", fileName);
                return false;
            }
        } else {
//            System.out.println("文件" + fileName + "不存在，删除失败！");
            logger.error("文件[{}]不存在，删除失败！", fileName);
            return false;
        }
    }


    /**
     * 删除指定的目录以及目录下的所有子文件
     *
     * @param dirName is 目录路径
     * @return true or false 成功返回true，失败返回false
     */
    public static boolean deleteDir(String dirName) {
        // dirName不以分隔符结尾则自动添加分隔符
        if (dirName.endsWith(File.separator)) {
            dirName = dirName + File.separator;
        }
        // 根据指定的文件名创建File对象
        File file = new File(dirName);
        // 目录不存在或者
        if (!file.exists() || (!file.isDirectory())) {
//            System.out.println("目录删除失败" + dirName + "目录不存在！");
            logger.error("目录删除失败[{}]，目录不存在！", dirName);
            return false;
        }
        // 列出源文件下所有文件，包括子目录
        File[] fileArrays = file.listFiles();

        // 将源文件下的所有文件逐个删除
        for (int i = 0; i < fileArrays.length; i++) {
            DeleteFileUtil.deleteAnyone(fileArrays[i].getAbsolutePath());
        }

        // 删除当前目录
        if (file.delete()) {
            System.out.println("目录" + dirName + "删除成功！");
            logger.error("目录[{}]删除成功！", dirName);
        }
        return true;
    }


    /**
     * 删除指定目录下的文件(包括目录)
     **/
    public static void main(String[] args) {

        // 创建目标文件路径
        String fileName = "D:\\upload\\5560d05d-f6b8-4e16-a070-6887d9335853.json";
        // 调用删除目标文件方法
        DeleteFileUtil.deleteAnyone(fileName);
    }

}

